//具名 必须 通过方法名引入
import { createRouter, createWebHistory } from 'vue-router'

// 匿名的引用  代表的只是形参
import Layout from '../views/LayOut/LayOut.vue'

import store from "../store/index.js"


//路由数组
const routes = [
  //登陆页面
  {
    path: "/login",
    name: "login",
    component: () => import("../views/pages/login.vue")
  },
  {
    path: "/page",
    name: "layout",
    component: Layout, //登录页-》用户页面里面包含菜单 children包含子页面  
    redirect: "/index", //重定向
    //子路由/嵌套路由
    children: [
      {
        path: "/index",
        name: "index",
        component: () => import("../views/pages/index.vue")
      },{
        path: "/roles",
        name: "roles",
        component: () => import("../views/pages/rolesList.vue")
      }, {
        path: "/user",
        name: "user",
        component: () => import("../views/pages/usersList.vue")
      },{
        path: "/goods",
        name: "goods",
        component: () => import("../views/pages/goodsList.vue")
      }
    ]
  }
]
//创建历史路由实例
//初始化/实例化  目的 为这个实例注入属性 ，如路由数组
 // 只有创建出 实例，才能利用这个实例的方法和属性
const router = createRouter({
  //未设置 process.env.BASE_URL  ，config.js ,env文件 , 自定义  http: 通信协议   IP+port+前缀+path  = 计算机+端口 +前缀 +路由
  //域名=端口+IP
  //默认 路由前缀  
  history: createWebHistory(process.env.BASE_URL),
  //上面创建路由数组
  routes
})

//beforeEach 是router 实例 一个方法，  参数: 就是一个函数 ,这个函数包含三个参数
//作用:在每次路由跳转时，需要进行的操作
//form 目前路径  to: 即将跳转路由 ，next : 必须执行才可以完成跳转
//路由守卫
router.beforeEach((to, from, next) => {

  //判断用户是否登录

  console.log("store", store.state.uInfo);
  // 获取用户信息 
  //store  /
  const uInfo = store.state.uInfo.userInfo  
  // store 全局状态管理器.state.模块.初始化变量（用户信息）3.用户信息包含token信息
  //1.从来没有登录过,2.退出登录了  3.长时间没有退出登录，token过期了,跳转登录页，token一般30分钟，每次请求 都会重置有效期
  if (!uInfo.username) {
    //跳转到登录页
    if(to.path==="/login"){
      next()
      return
    }
    //强制跳转到登录页，对应第三种情况
    next("/login")
  } else {
    console.log(from)
    //判断下token是否过期 //每次请求的时候，如果服务器返回无效的token 就跳转登录页
    if(to.path =="" || to.path == "/"){
      next('/roles')
      return;
    }
    next() 
  }
})
export default router
